package com.hongning.railway.data;


import android.databinding.ObservableInt;

import com.hongning.railway.entity.LoginEntity;
import com.hongning.railway.entity.UserEntity;
import com.hongning.railway.entity.reqbean.MettingMessageBean;
import com.hongning.railway.entity.reqbean.QueryCpInfoRequestBean;
import com.hongning.railway.entity.reqbean.QuestionRequestListBean;
import com.hongning.railway.entity.reqbean.QuestionResultBean;
import com.hongning.railway.entity.reqbean.QuestionResultListBean;
import com.hongning.railway.entity.reqbean.ReqAddExamScore;
import com.hongning.railway.entity.reqbean.ReqAddExperience;
import com.hongning.railway.entity.reqbean.ReqAddPages;
import com.hongning.railway.entity.reqbean.ReqAddScoreBean;
import com.hongning.railway.entity.reqbean.ReqAddViewOrPraise;
import com.hongning.railway.entity.reqbean.ReqAnswerCheck;
import com.hongning.railway.entity.reqbean.ReqAnswerSubmit;
import com.hongning.railway.entity.reqbean.ReqAssessesIntegral;
import com.hongning.railway.entity.reqbean.ReqAssessesIntegralBean;
import com.hongning.railway.entity.reqbean.ReqCadreListBean;
import com.hongning.railway.entity.reqbean.ReqCategory;
import com.hongning.railway.entity.reqbean.ReqDynamicBean;
import com.hongning.railway.entity.reqbean.ReqExam;
import com.hongning.railway.entity.reqbean.ReqExperienceList;
import com.hongning.railway.entity.reqbean.ReqKaoHeBaseBean;
import com.hongning.railway.entity.reqbean.ReqKaoHeGroupBean;
import com.hongning.railway.entity.reqbean.ReqKaoHeListBean;
import com.hongning.railway.entity.reqbean.ReqMemberList;
import com.hongning.railway.entity.reqbean.ReqNewDetail;
import com.hongning.railway.entity.reqbean.ReqNewsBean;
import com.hongning.railway.entity.reqbean.ReqScoreBean;
import com.hongning.railway.entity.reqbean.ReqUpdateExperience;
import com.hongning.railway.entity.reqbean.ReqVideoBean;
import com.hongning.railway.entity.reqbean.RosterMainBean;
import com.hongning.railway.entity.reqbean.ThreesessionSanDoneLessonBean;
import com.hongning.railway.entity.reqbean.UpdatesignBean;
import com.hongning.railway.entity.resbean.BaseRes;
import com.hongning.railway.entity.resbean.BaseResCadreListBean;
import com.hongning.railway.entity.resbean.BaseResExam;
import com.hongning.railway.entity.resbean.DataBeanX;
import com.hongning.railway.entity.resbean.Fileterbean;
import com.hongning.railway.entity.resbean.NewsCategoryBean;

import com.hongning.railway.entity.resbean.ResAnswerCheck;
import com.hongning.railway.entity.resbean.ResAnswerSubmitBean;
import com.hongning.railway.entity.resbean.ResCadreBean;
import com.hongning.railway.entity.resbean.ResDetailScore;
import com.hongning.railway.entity.resbean.ResDynamicBean;
import com.hongning.railway.entity.resbean.ResExamCompleteBean;
import com.hongning.railway.entity.resbean.ResExamItem;
import com.hongning.railway.entity.resbean.ResExperienceBean;
import com.hongning.railway.entity.resbean.ResKaoHeBean;
import com.hongning.railway.entity.resbean.ResKaoHeListBean;
import com.hongning.railway.entity.resbean.ResListScoreDetailBean;
import com.hongning.railway.entity.resbean.ResMemberInfo;
import com.hongning.railway.entity.resbean.ResNewsBean;
import com.hongning.railway.entity.resbean.ResNewsDetail;
import com.hongning.railway.entity.resbean.ResOptionBean;
import com.hongning.railway.entity.resbean.ResPhotoItem;
import com.hongning.railway.entity.resbean.ResScoreRankBean;
import com.hongning.railway.entity.resbean.ResScoreRankInfo;
import com.hongning.railway.entity.resbean.ResVideoBean;
import com.hongning.railway.entity.resbean.UpdateUserInfoBean;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import me.goldze.mvvmhabit.http.BaseResponse;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.FieldMap;
import retrofit2.http.Query;

/**
 * Created by goldze on 2019/3/26.
 */
public interface HttpDataSource {
    //模拟登录
    Observable<BaseResponse<LoginEntity>> login(String username, String password);


    //获取新闻类别
    Observable<BaseResponse<List<NewsCategoryBean>>> getCategory(ReqCategory reqCategory);

    //获取新闻列表信息

    Observable<BaseResponse<DataBeanX>> getNewsList(ReqNewsBean reqNewsBean);


    //首页推荐位置文章

    Observable<BaseResponse<List<ResNewsBean>>> getTop5(ReqNewsBean reqNewsBean);


    //动态列表
    Observable<BaseResponse<ResDynamicBean>> getNewsDynamicList(ReqDynamicBean info);


    //文章详情

    Observable<BaseResponse<ResNewsDetail>> getNewsDetail(ReqNewDetail reqNewDetail);

    //获取动态相册列表
    Observable<BaseResponse<BaseRes<List<ResPhotoItem>>>> getDynamicPhotos(ReqDynamicBean reqDynamicBean);

    //视频列表信息
    Observable<BaseResponse<BaseRes<List<ResVideoBean>>>> getVideoList(ReqVideoBean reqVideoBean);

    //退出登录
    Observable<BaseResponse> logout();

    /**
     * 考试列表信息
     * @param reqNewsBean
     * @return
     */
    Observable<BaseResponse<BaseResExam<ResExamItem>>> getExamList(ReqNewsBean reqNewsBean);

    /**
     * 考试已完成列表信息
     * @param reqNewsBean
     * @return
     */
    Observable<BaseResponse<List<ResExamCompleteBean>>> getExamCompleteList(ReqNewsBean reqNewsBean);

    Observable<BaseResponse<BaseResExam<ResOptionBean>>> getquestionslist(ReqExam reqExam);

    //三会一课列表
    Observable<BaseResponse<ThreesessionSanDoneLessonBean>> selectmeet(MettingMessageBean mettingMessageBean);

    Observable<BaseResponse<ResAnswerSubmitBean>> answerSubmit(ReqAnswerSubmit reqAnswerSubmit);

    //检查答案
    Observable<BaseResponse<BaseResExam<ResAnswerCheck>>> answerCheck(ReqAnswerCheck reqAnswerCheck);

    //更新三会一课的状态
    Observable<BaseResponse> updatesign(UpdatesignBean updatesignBean);

    /**
     * 点赞浏览记录接口
     */
    Observable<BaseResponse> addvieworPraise(ReqAddViewOrPraise reqAddViewOrPraise);

    //获取三会一课的消息内容
    Observable<BaseResponse<List<ThreesessionSanDoneLessonBean.DataBean>>> selectMessage(MettingMessageBean mettingMessageBean);

    //获取花名册
    Observable<BaseResponse<RosterMainBean>> selectCadreList(MettingMessageBean mettingMessageBean);


    /**
     * 获取干部列表信息
     */
    Observable<BaseResponse<BaseResCadreListBean<ResCadreBean>>> getCadreList(ReqCadreListBean reqCadreListBean);


    /**
     * 获取干部列表信息
     */
    Observable<BaseResponse<List<ResMemberInfo>>> getCadreMemberList(ReqMemberList reqCadreListBean);


    /**
     * 提交干部评测分数信息
     */
    Observable<BaseResponse<String>> submitCadreMember(ReqMemberList reqCadreListBean);


    /**
     * 保存干部评测分数信息
     */
    Observable<BaseResponse<String>> saveCadreMember(ReqMemberList reqCadreListBean);


    /**
     * 添加积分
     */
    Observable<BaseResponse<String>> addScore(ReqAddScoreBean reqAddScoreBean);


    Observable<BaseResponse<String>> addExamScore(ReqAddExamScore reqAddExamScore);


    /**
     * 积分首页排名等信息
     */
    Observable<BaseResponse<ResScoreRankInfo>> scoreRank(ReqScoreBean reqScoreBean);

    /**
     * 积分详情
     */
    Observable<BaseResponse<ResDetailScore>> ScoreDetail(ReqScoreBean reqScoreBean);

    /**
     * 积分详情
     */
    Observable<BaseResponse<ResScoreRankInfo>> getScoreRank(ReqScoreBean reqScoreBean);

    /**
     * 总积分排名
     */
    Observable<BaseResponse<List<ResScoreRankBean>>> allrankScore(ReqScoreBean reqScoreBean);


    /**
     * 支部排名
     */
    Observable<BaseResponse<List<ResScoreRankBean>>> zhiburankScore(ReqScoreBean reqScoreBean);


    /**
     * 总积分排名
     */
    Observable<BaseResponse<List<ResScoreRankBean>>> allHnrankScore(ReqScoreBean reqScoreBean);


    /**
     * 支部排名
     */
    Observable<BaseResponse<List<ResScoreRankBean>>> zhibuHnrankScore(ReqScoreBean reqScoreBean);


    /**
     * 增加心得体会
     *
     */
    Observable<BaseResponse<Boolean>> addExperience(ReqAddExperience reqAddExperience);

    /**
     * 心得体会列表
     *
     */
    Observable<BaseResponse<ResExperienceBean>> getExperienceList(ReqExperienceList reqExperienceList);

    /**
     * 修改心得体会
     *
     */
    Observable<BaseResponse<Boolean>> updateExperience(ReqUpdateExperience reqUpdateExperience);


    /**
     * integral/selectAssessesIntegra
     * 党员互评查询
     */
    Observable<BaseResponse<List<QuestionResultBean>>> selectAssessesIntegral(ReqAssessesIntegral reqAssessesIntegral);


    /**
     * integral/selectAssessesIntegra
     * 党员互评提交
     */
    Observable<BaseResponse<String>> addAssessesIntegral(ReqAssessesIntegralBean reqAssessesIntegral);

    /**
     * integral/selectAssessesIntegra
     * 保存党员互评查询
     */
    Observable<BaseResponse<String>> saveAssessesIntegral(ReqAssessesIntegralBean reqAssessesIntegral);


     /**
     * 党建考核列表
     */
    Observable<BaseResponse<List<ResKaoHeBean>>> getPartyExamInfoListForApp(ReqKaoHeListBean reqAssessesIntegral);

    /**
     * 党建考核二级列表
     */
    Observable<BaseResponse<List<ResKaoHeBean>>> getPartyExamInfoDetailsById(ReqKaoHeGroupBean reqAssessesIntegral);


    /**
     * 查询党员测评列表
     * @param questionRequestListBean
     * @return
     */
    Observable<BaseResponse<QuestionResultListBean>> selectStatisticsByPage(QuestionRequestListBean questionRequestListBean);
    /**
     * selectTestScoreAPP
     */
    Observable<BaseResponse<ResKaoHeListBean>> selectTestScoreAPP(ReqKaoHeBaseBean reqAssessesIntegral);

    /**
     * 查询互评详情
     * @param queryCpInfoRequestBean
     * @return
     */
    Observable<BaseResponse<ReqAssessesIntegralBean>> selectAssessesIntegralById(QueryCpInfoRequestBean queryCpInfoRequestBean);

    //更新用户信息
    Observable<BaseResponse<LoginEntity>> updateStaffInfo(UpdateUserInfoBean updateUserInfoBean);

    //筛选条件
    Observable<BaseResponse<List<Fileterbean>>> getTypesForApp();

    Observable<BaseResponse> addPageView(ReqAddPages reqAddPages);
}
